package org.opens;

import org.opens.sql.GenSqlHelper;
import org.opens.sql.constant.GenMapperMode;
import org.opens.sql.constant.GenSqlType;
import org.opens.sql.constant.IdType;
import org.opens.sql.genConfig.*;
import org.opens.util.DatabaseConnectInfoEntity;
import org.junit.Test;

import java.util.Date;

/**
 * 功能描述
 *
 * @author by zhangyuming
 * @date 2022/9/14
 */
public class GenOracleTestSqlTypeConverterHandle {

    /**
     * 备注:
     * - 生成的表必须要有主键!
     */
    @Test
    public void test1() {
        // 数据库连接信息
        DatabaseConnectInfoEntity connectInfo = DatabaseConnectInfoEntity.builder()
                .url("jdbc:oracle:thin:@192.168.5.23:1521/CMSUAT")
                .username("cms")
                .password("cms")
                .build();

        // 作者信息
        AuthorInfo authorInfo = AuthorInfo.builder()
                .authorName("zhangyuming")
                .createDate(new Date())
                .build();

        // 生成entity的公共配置
        GenEntityPublicConfig genEntityPublicConfig = GenEntityPublicConfig.builder()
                .withLombokAnnotation(false)
                .withMybatisAnnotation(false)
                .dateFieldWithSpringAnnotation(false)
                .dateFieldWithJacksonAnnotation(false)
                .datePattern("yyyy-MM-dd")
                .packageInfo("org.opens.entity")
                .build();

        // 生成mapper的公共配置
        GenMapperPublicConfig genMapperPublicConfig = GenMapperPublicConfig.builder()
                .daoPackage("org.opens.dao")
                .resourcePath("org.opens.dao.oracle")
                // 控制是否自动给mapper.xml文件中生成的sql片段加别名
                .autoAlias(false)
                .genColumnMapping(true)
                .genColumnSql(true)
                // 生成mybatis模式的代码
                .genMapperMode(GenMapperMode.MYBATIS)
                .idType(IdType.ORACLE_SYS_GUID)
                .build();

        // 生成service的公共配置
        GenServicePublicConfig genServicePublicConfig = GenServicePublicConfig.builder()
                .autowiredDao(true)
                .withSlf4jAnnotation(true)
                .packageInfo("org.opens.service")
                .build();

        // 生成controller的公共配置
        GenControllerPublicConfig genControllerPublicConfig = GenControllerPublicConfig.builder()
                .autowiredService(true)
                .packageInfo("org.opens.web")
                .withSlf4jAnnotation(true)
                .build();

        //TODO 在spring集成该工具时, 生成目录需要加上请求者ip和时间戳, 确保本次生成和上一次独立
        // 生成总配置
        GenSqlConfig config = GenSqlConfig.builder()
                // 生成文件的存放目录
                .genPath("C:\\gen_code")
                // 生成前是否清空目标目录, 危险选项
                .genPreClear(false)
                // 生成代码后是否生成压缩包
                .genResult2zip(false)
                // 控制生成后是否打开目标目录
                .genEndOpenGenPath(true)
                // 数据库的连接信息
                .databaseConnectInfo(connectInfo)
                // 控制生成哪些表的数据
                //.genTable("CMS_DICT_PROJECT").genTable("BUSINESS_INFORMATION").genTable("IT_CONTRACT_INCOME_INFO").genTable("CT_CONTRACT_INCOME_INFO").genTable("PARTNER_INFORMATION")
                /*.genTable("CMS_DICT_PROJECT_IFT")
                .genTable("CMS_BUSINESS_INFORMATION")
                .genTable("CMS_IT_CONTRACT_INCOME_INFO")
                .genTable("CMS_CT_CONTRACT_INCOME_INFO")
                .genTable("CMS_PARTNER_INFORMATION")
                .genTable("CMS_SHUTDOWN_INFORMATION")
                .genTable("CMS_CHANGE_INFORMATION")
                .genTable("CMS_BUDGET_INFORMATION")*/
                .genTable("FND_APPENDIX")
                // 控制生成那些类型文件
                .genSqlType(GenSqlType.ENTITY)
                .genSqlType(GenSqlType.MAPPER)
                // 注入生成entity的公共配置
                .genEntityPublicConfig(genEntityPublicConfig)
                // 注入生成mapper的公共配置
                .genMapperPublicConfig(genMapperPublicConfig)
                // 注入生成service的公共配置
                .genServicePublicConfig(genServicePublicConfig)
                // 注入生成controller的公共配置
                .genControllerPublicConfig(genControllerPublicConfig)
                // 注入作者信息
                .authorInfo(authorInfo)
                .build();

        // 开始生成
        new GenSqlHelper().start(config);
    }

}
